嚴格模式是指可以讓 JavaScript 的語法變得更嚴謹,相對於原本的語法來說,在執行時較不容易出錯。
那該如何使用呢?
其實非常簡單,若整隻檔案都要套用嚴格模式,只需要在檔案的最前方加上 "use strict"
即可,當然,我們也可以只針對個別的函式去做設定,例如像以下這段程式碼
// 在函式內單獨使用嚴格模式
function f(x) {
"use strict"
var a = 12;
b = a + x;
}
f(5) // 會報錯,因為嚴格模式下,不能使用未宣告變數
也就是在函式的最頂端加上 "use strict"
即可。
接下來,就讓我們來說說什麼樣的情況,在嚴格模式下會發生 error 吧!
下面我會針對較常使用到的情境去做程式碼範例,如果有同學對於 eval、callee 等名詞較為陌生,我在文末也會附上相關資料提供參考。
// 未宣告使用變數
(function() {
"use strict";
testvar = 4;
})();
// 定義重複的屬性
(function() {
"use strict";
var Obj = {
height: 10,
width: 15,
height: 20
};
})();
// 定義重複的參數
(function() {
"use strict";
function foo(name, name) {
return name;
};
})();
// 如果不是在 strict 模式下,testvar 的值是全域物件,但是其值在 strict 模式下則是 undefined。
(function() {
"use strict";
function testFunc() {
return this;
}
var testvar = testFunc();
})();
// 在 if 或 for 區塊內宣告變數
(function() {
"use strict";
if (true) {
function run() {
console.log("run");
}
}
run();
})();
以上就是日常生活中,同學們在嚴格模式下,較容易出現的錯誤,有時候我會在撰寫 JavaScript 時,加上嚴格模式,來導正一些自己的壞習慣,雖然一開始會覺得不太適應,但對長遠來說,一定是有幫助的哦!各位同學不妨試著在嚴格模式下來做開發,相信會有一些幫助哦。
不知不覺,鐵人賽已經走到了三分之一,好像已經漸漸習慣了這樣的步調?
參考資料:
Tommy - 深入 JavaScript 核心課程
卡斯柏 - JavaScript 的嚴格模式 "use strict"
MDN - arguments.callee
MDN - eval()